В гите есть 2 репозитория:

  • https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev (ветка dev!) - здесь хранится "ядро" сервиса, т.е. основная бизнес-логика работы в инфраструктуре ПГС - отправка моков и информации о сервеси при старте, обработка ошибок и получение и остылка сообщений в нужные топики. А также, дефолтная имплементация сервиса - это простое преобразование из формата XML СМЭВ по XSD схеме в обычный json или xml без атрибутов
  • https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git (ветка master) - здесь хранится кастомизация сервисов, а также XSD схемы, моки и настройки для каждого из вида услуг. Каждая папка в данном репозитории - это дополнительные исходники для сервиса.

Важно! Для корректной работы на локальном компьютере необходимо установить gradle и git последних версий

Как использовать mz-service

На примере написания нового сервиса mvd-passport-validity:

  1. Клонируем репозиторий https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev
  2. Задаём имя сервиса, который нам требуется (либо новый, либо тот, который хотим отредактировать) одним из 3-х способов
    1. задать переменную окружения MZ_SERVICE_NAME с названием сервиса (название сервиса совпадает с названием папки в mz-xsd-storage)
    2. задать системную переменную MZ_SERVICE_NAME - т.е. запускать gradle таски с параметром -DMZ_SERVICE_NAME=<имя_сервиса>
    3. третий вариант - это прописать название сервиса в build.gradle примерно в 25-ой строчке:, т.е. это дефолтное значение, если не указана переменная окружения или системная переменная (только не нужно коммитить это (улыбка))
  3. Далее подготавливаем сервис. Для этого запускаем в gradle таску prepareService. Что происходит при запуске:
    1. gradle использует Git для подключения исходников из второго репозитория https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git. Но делает это максимально быстро: подгружается не весь репозиторий, а только нужная папка
    2. исходники из второго репозитория положатся в папку mz-xsd/mvd-passport-validity
  4. Синхронизируйте проект IDEA с Gradle. После этого директории и mvd-passport-validity подключатся как дополнительный source-set:
  5. Далее создаём струтктуру каталогов и нужные файлы конфигурации для сервиса по номеру версии протокола (для нашего примера mvd-passport-validity, версия протокола 1.3.0) (Важно! В качестве разделителя в номере версии выбрана нижняя черта. это связано с техническими ограничениями библиотек, поэтому каталог для версии 1.3.0 будет называться 1_3_0 ). В каждом каталогее версии должны присутствовать следующие каталоги:
    1. api - здесь хранятся примеры запросов и ответов, а также сгенерированные json-схемы для формата запросов и ответов - сюда класть ничего не нужно, эта директория и файлы в ней создаются автоматически
    2. schema - файлы схемы. Важно! Осень рекомендуется переименовывать корневой файл xsd в schema.xsd, чтобы избежать фрагментации в настройках и не заморачиваться на окнфигах (файл shema.xsd ищется по умолчанию)
    3. mock - всё, что связано с моками. В случае с mvd-passport-validity на тех. портале было 3 примера запросов и ответов. Так же, лежит файл mock.yml по формату точно такой же как и был:
    4. файл binding.xml - файл, вкотором описываются некоторые правила для генерации классов из XSD (например, кастомные адаптеры, неймспейсы и имена классов для конкретных типов и элементов - для решения конфликтов имён). Формат всегда можно посмотреть в интернете, либо в уже готовых сервисах.
  6. Создаём файл application-prod.yml - это файл настроек Micronaut с профайлом prod. В этом файле можно переопределять любые настройки сервиса. Кроме того, описываются специфические значения для конкретного сервиса:
    app:
    # название сервиса (без префикса mz-)
    service-name: mvd-passport-validity
    info:
    # вид сведеиний
    name: Проверка действительности Паспорта Гражданина РФ по серии и номеру
    provider:
    # код провадера сведений
    code: mvd
    # полное название провайдера
    name: Министерство внутренних дел Российской Федерации
    # сокращенное название провайдера
    short-name: МВД
    versions:
    # настройки по номерам версий. Важно! используйте в качестве разделителя символ - (минус)
    1-3-0:
    # ссылка на тех портал
    link: https://lkuv.gosuslugi.ru/paip-portal/#/inquiries/797df91e-0ec0-4fe5-852a-9f2afa6ebdfb/versions/0eb70e26-3688-4667-9520-6d0a0e3d70ca?area=PROD
    # неймспейс - тоже берётся с тех портала
    namespace: urn://mvd/guvm/passport-validity/1.3.0
    request-to-smev:
    # Название корневого тега запроса (по-уолчанию ищется сгененрированный класс с таким названием)
    clazz: PassportValidityRequest
    # Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
    jaxb-class-name: GeneratedRequest
    # Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityRequest
    mapped-class-name: MyRequest
    response-from-smev:
           # Название корневого тега ответа
    clazz: PassportValidityResponse
    # Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
    jaxb-class-name: GeneratedResponse
           # Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityResponse
    mapped-class-name: MyResponse
  7. После того, как мы заполним папку с настройками, запускаем генерацию java-классов по XSD модели (в gradle таск jaxb). У нас добавятся в classpath сгенерированные файлы:
  8. Создаём интерфейс ApiController, по которому сгенерируется swagger-файл. В нём указываем 2 класса - класс запроса и класс ответа: В качестве тэга ставим версию с префксом v. В путь ставим тоже версию протокола

Для простых сервисов - это всё. Сервис готов и можно пробовать  его запускать локально. При локальном запуске  у вас сгенерируются примеры запросов и ответов в папке api

Подключение S3, Postgres, Arango, Redis

Для подключения дополнительных библиотек создай в mz-xsd-storage в пакете с сервисом файл service.gradle и добавить в нём ключ serviceWithS3 = true (для работы с S3) или serviceWithPostgres=true (для работы с Postgres):

Как работать с S3 можно посмотреть на примере сервиса fns-bfoinn. 

В build.gradle можно посмотреть дополнительные ключи для работы с redis, arango, httpclient и другие.

Написать комментарий...